/**
 * 随机获取Element-plus的按钮类型
 * @returns 返回Element-plus的按钮类型
 */
export function randomElementBtnType(): 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'text' {
    const array: ['primary', 'success', 'warning', 'danger', 'info', 'text'] = ['primary', 'success', 'warning', 'danger', 'info', 'text']
    return array[Math.floor(Math.random() * array.length)]
}

/**
 * 随机获取一个数组中的元素
 * @param array 数组
 * @returns 返回数组中的一个元素
 */
export function randomElementFromArray<T>(array: T[]): T {
    if (array.length === 0) {
        throw new Error('数组不能为空')
    }
    return array[Math.floor(Math.random() * array.length)]
}

/**
 * 随机获取一个数组中的多个元素
 * @param array 数组
 * @param count 数量
 * @returns 返回数组中的多个元素
 */
export function randomElementsFromArray<T>(array: T[], count: number): T[] {
    if (array.length === 0) {
        throw new Error('数组不能为空')
    }
    if (count <= 0) {
        throw new Error('数量必须大于0')
    }
    if (count > array.length) {
        throw new Error('数量不能大于数组长度')
    }
    const result: T[] = []
    for (let i = 0; i < count; i++) {
        result.push(randomElementFromArray(array))
    }
    return result
}

/**
 * 随机获取一个数组中的多个不重复元素
 * @param array 数组
 * @param count 数量
 * @returns 返回数组中的多个不重复元素
 */
export function randomElementsFromArrayNoRepeat<T>(array: T[], count: number): T[] {
    if (array.length === 0) {
        throw new Error('数组不能为空')
    }
    if (count <= 0) {
        throw new Error('数量必须大于0')
    }
    if (count > array.length) {
        throw new Error('数量不能大于数组长度')
    }
    const result: T[] = []
    for (let i = 0; i < count; i++) {
        const element = randomElementFromArray(array)
        if (result.includes(element)) {
            i--
            continue
        }
        result.push(element)
    }
    return result
}

/**
 * 随机获取范围内的整数
 * @param min 最小值
 * @param max 最大值
 * @returns 返回范围内的整数
 */
export function randomInt(min: number, max: number): number {
    if (min > max) {
        throw new Error('最小值不能大于最大值')
    }
    return Math.floor(Math.random() * (max - min + 1)) + min
}
